package ru.pashkan.spring.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import ru.pashkan.spring.controller.request.NewUserRequest;
import ru.pashkan.spring.controller.response.UserPojo;
import ru.pashkan.spring.db.service.UserService;
import ru.pashkan.spring.entity.User;

import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.List;



@Controller
@RequestMapping( method = RequestMethod.GET )
public class MainController {

    CustomObjectMapper objectMapper = new CustomObjectMapper();

    @Autowired
    UserService userService;

    // Загрузка страницы
    @RequestMapping({"/", "/main.htm"})
    public ModelAndView mainView(){
        ModelAndView mav = new ModelAndView();
        mav.setViewName("main");

        return mav;
    }

    // Запрос на отображение списка пользователей
    @RequestMapping(value = "/userList")
    public @ResponseBody List<User> userList(){

        List<User> userList = userService.getAllUsers();

        return userList;
    }

    // Запрос на манипуляции с пользователями
    @RequestMapping(value = "/userReqest")
    public @ResponseBody Object startVechicle(HttpServletRequest request, @RequestParam("id") int id) throws IOException {

        // Берем из запроса параметр action
        String action = request.getParameter("action");

        Object response = null;

        // Добавить пользователя
        if(action.equals("createUser")) {

            String jsonRequest = request.getParameterMap().get("newUser")[0];
            NewUserRequest newUserRequest = objectMapper.readValue(jsonRequest, NewUserRequest.class);

            User newUser = newUserRequest.getUser();

            System.out.println(jsonRequest);
            System.out.println(newUser.toString());
            if(userService.add(newUser)){
                response = new UserPojo(newUser);
            }else{
                //TODO вывод ошибки при совпадении имен пользователей
                response = "error";
            }
        } else if(action.equals("deleteUser")){
        // Удалить пользователя
            String jsonRequest = request.getParameterMap().get("delUser")[0];
//            System.out.println("--------"+jsonRequest+"---"+id);

//            JsonParser parser = new JsonParser();
//
//            Object obj = parser.parse(json);
//            JSONObject jsonObj = (JSONObject) obj;
//            System.out.println(jsonObj.get("paramsStr"));
              userService.delete(id);

        } else if(action.equals("editUser")){
        // Редактировать пользователя

        }
        return response;
    }

//    @RequestMapping(value = "{id}", method = RequestMethod.DELETE)
//    @ResponseBody
//    public String deleteCar(@RequestBody User user) {
//        userService.delete(user);
//        return "delete";
//    }

    @RequestMapping("/reqest2")
    public ModelAndView api(HttpServletRequest request) throws IOException {
        ModelAndView mav = new ModelAndView();

        Object response = null;



        User newUser = new User();
        newUser.setLogin("Login");
//        newUser.setName("pashkan");
//        newUser.setNumber(10);

        response = new UserPojo(newUser);

        System.out.println("--------------");
//        mav.addObject("response", response);
        mav.addObject("response", "responcable");
        return mav;



    }










}
